#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <vector>
#include <string>
using namespace std;

//bool sort1(vector<string>& str, int& n) {
//    for (int j = 0; j < n - 1; ++j) {
//        if (str[j].compare(str[j + 1]) < 0)
//            continue;
//        else {
//            return false;
//            break;
//        }
//    }
//    return true;
//}
//
//bool sort2(vector<string>& str, int& n) {
//    for (int k = 0; k < n - 1; ++k) {
//        if (str[k].size() > str[k + 1].size()) {
//            return false;
//            break;
//        }
//    }
//    return true;
//}
//
//int main() {
//    int n = 0;
//    while (cin >> n) {
//        vector<string> str;
//        for (int i = 0; i < n; ++i) {
//            string va;
//            cin >> va;
//
//            str.push_back(va);
//        }
//        if (sort1(str, n) && sort2(str, n)) {
//            cout << "both" << endl;
//        }
//        if (!sort1(str, n) && sort2(str, n)) {
//            cout << "lengths" << endl;
//        }
//        if (sort1(str, n) && !sort2(str, n)) {
//            cout << "lexicographically" << endl;
//        }
//        if (!sort1(str, n) && !sort2(str, n)) {
//            cout << "none" << endl;
//        }
//    }
//}

int Gac(int a, int b)
{
    int t = a % b;
    while (t)
    {
        a = b;
        b = t;
        t = a % b;
    }
    return b;
}

int main() {
    int a, b, y;
    cin >> a >> b;
    y = Gac(a, b);
    cout << a * b / y << endl;
    return 0;
}
